As very high bandwidth transmission technology has come of age, computations requiring large computer resources are often performed on shared computer facilities that are not local, but are rather accessed through a network. This obviates the need to obtain costly local computers for computations that don't require dedicated computer resources—for example, computations that are performed infrequently. The availability of shared computer resources gives smaller organizations access to computer resources that such organizations cannot afford to purchase. This general concept of performing computation on network-accessed resources, rather than on local resources, is called “cloud computing”—because it takes place in the network “cloud”.
With the advent of cloud computing, organizations with large computing resources have offered other parties access to these computational resources. Such services, which enable one organization to use the computational infrastructure of another organization, are sometimes called “Infrastructure as a Service” or “IaaS”.
The IaaS cloud computing model has become increasingly more attractive as cloud users become more comfortable entrusting their workloads to the cloud; as equipment vendors provide multi-user versions of their products to support deployment in the cloud; and, as service providers roll out new sophisticated services. IaaS cloud platforms provide on-demand, near-instant access to seemingly unlimited computational resources. Operation of these resources may be realized through virtualization or logical partitioning of the physical resources, and the subsequent careful management, or orchestration, of the virtualized cloud resources. Such management of cloud computing resources is referred to as “cloud orchestration”.
Cloud orchestration includes the management and manipulation of computational, storage and network cloud resources to realize user requests, while at the same time realizing the operational objectives of the cloud service provider. Users indirectly orchestrate the cloud via provider Application Programming Interfaces (“API”s) driven by their needs and workloads, while providers internally orchestrate the cloud according to their operational objectives, e.g., cost reduction through consolidating physical resources or improving the ability to fulfill service level agreements (“SLA”s) by dynamically reallocating compute cycles and network bandwidth.
This highly dynamic environment makes cloud orchestration a challenging problem. Not only should user and operator requirements be satisfied as described above, but this needs to be accomplished while servicing large numbers of simultaneous user requests, enforcing policies that reflect service and engineering rules, and performing fault and error handling. Accordingly, implementing Infrastructure-as-a-Service requires a sophisticated cloud control framework to orchestrate cloud resource provisioning, configuration, utilization and decommissioning across a distributed set of physical resources. Additionally, the increasing scale and sophistication of cloud services have imposed even greater challenges to ensure correctness and deal with errors with minimum human intervention.